<?php

/***********************************************/
/*CONTENIDO*/
/***********************************************/
echo" <div class=\"pag_content\">
 	<div class=\"pag_content_title\">
		<div class=\"pag_title_cap\">Cap&iacute;tulo 3: </div>
		<div class=\"pag_title_cont\">Recuperaci&oacute;n de errores no cr&iacute;ticos</div>
    </div>
    <div class=\"pag_content_body\">         
	<div class=\"contenido_principal\">	
		<br />";
		
/***********************************************/
/*TITULO PARTE*/
/***********************************************/

echo"	<div class=\"parrafo_titulo\">
		Recuperar tablespace de indices
	</div>";		

	
/***********************************************/
/*CONTENIDO*/
/***********************************************/

echo"
<div class=\"parrafo\" align=\"justify\">
En este ejemplo vamos a simular la perdida de un tablespace que contiene los indices de una de nuestras tablas. Y vamos a ver como la recuperaci&oacute;n de este tablespace no tiene una impacto importante sobre el funcionamiento de la base de datos.
</div>
<div class=\"parrafo\" align=\"justify\">
Pasos:
</div>
<div class=\"parrafo\" align=\"justify\">
1) Me creo el tablespace para los indices:
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>SQL&GT;create tablespace INDEX_IND
datafile '/u01/app/oracle/oracle/product/10.2.0/oradata/orcl2/indices_dbf'
SIZE 10M
AUTOEXTEND ON NEXT 10M MAXSIZE 4096M
EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 1M
SEGMENT SPACE MANAGEMENT AUTO;

</p></pre></blockquote>
<div class=\"parrafo\" align=\"justify\">
2) Creamos los indices en ese tablespace.
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>> more create_script.sql

CREATE INDEX example_index_pk
ON mogu.prueba
(id_prueba)
PCTFREE 10
INITRANS 2
MAXTRANS 255
TABLESPACE INDEX_IND
STORAGE (
INITIAL 1M
NEXT 1M
PCTINCREASE 0
MINEXTENTS 1
MAXEXTENTS 8192
)
nologging
parallel (degree 4)
	/

SQL&gt; @create_index.sql

</p></pre></blockquote>
<div class=\"parrafo\" align=\"justify\">
Entre las caracteristicas de este indice, destacan que lo hemos creado con la opcion NOLOGGING que evita que se genere informacion de redo a la hora de crear el indice y la opcion de parallel para que oracle levante varios procesos para crear el indice. Estas dos opciones hacen que el indice se cree mucho mas rapido. Aunque el manual no lo dice, una vez creado suelo modificar el indice para ponelo LOGGING y NOPARALLEL.
</div>
<div class=\"parrafo\" align=\"justify\">
3) Miramos el explain plan esta query:
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>SQL&gt; explain plan for
	SELECT ID_PRUEBA FROM PRUEBA WHERE ID_PRUEBA=123;

SQL&gt; SELECT * FROM table(DBMS_XPLAN.DISPLAY('PLAN_TABLE',null,'ALL'));
Plan hash value: 1222123918

-------------------------------------------------------------------------------------
| Id  | Operation    	| Name         	| Rows  | Bytes | Cost (%CPU)| Time 	|
-------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT |              	| 	1 | 	3 | 	1   (0)| 00:00:01 |
|*  1 |  INDEX RANGE SCAN| EXAMPLE_INDEX_PK | 	1 | 	3 | 	1   (0)| 00:00:01 |
-------------------------------------------------------------------------------------


</p></pre></blockquote>
<div class=\"parrafo\" align=\"justify\">
4) Nos cargamos el datafile donde se ha construido el indice.
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>> cd /u01/app/oracle/oracle/product/10.2.0/oradata/orcl2
> mv indices_dbf indices_bk.dbf

</p></pre></blockquote>
<div class=\"parrafo\" align=\"justify\">
5) Consultamos nuestra tabla filtrando por el indice:
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>SQL&gt; SELECT ID_PRUEBA FROM PRUEBA WHERE ID_PRUEBA=123;

ERROR at line 1:
ORA-01116: error in opening database file 6
ORA-01110: data file 6: '/u01/app/oracle/oracle/product/10.2.0/oradata/orcl2/indices_dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
</p></pre></blockquote>
<div class=\"parrafo\" align=\"justify\">
NOTA: Vemos que falla en el tablespace donde esta el indice.
</div>
<div class=\"parrafo\" align=\"justify\">
6) La soluci&oacute;n pasa por borrar el indice y hacerlo en otro tablespace.
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>SQL&GT; DROP INDEX EXAMPLE_INDEX_PK;

Index dropped.
</p></pre></blockquote>
<div class=\"parrafo\" align=\"justify\">
Para crearlo repetimos el paso 2.
</div>
";
	
echo"
	</div> 		 
    </div>
    <div class=\"pag_content_footer\">
    </div>
    <div class=\"pag_content_nav\">		
		<div class=\"pag_contenido_left\">
			<a  class=\"cap_next\" href=\"ocp_main.php?cap=3&part=2\">	&lt; Anterior </a>
		 </div>
		<div class=\"pag_contenido_right\" align=\"right\">	
			<a  class=\"cap_next\" href=\"ocp_main.php?cap=4&part=0\">	Cap&iacute;tulo 4 &gt;</a>
		 </div>
	</div>      
</div>
";


?>